\chapter{Ataques de Negação de Serviço}

O presente capítulo pretende definir os conceitos básicos dos ataques de negação de serviço, além de mostrar exemplos dos ataques, 
permitindo uma melhor visão do assunto para os próximos capítulos.

A Internet é um conglomerado de redes  orientadas ponto a ponto, o que quer dizer que quase todo o processamento da Internet se dá 
nos nós de origem e destino (clientes e servidores), as sub-redes pelas quais a transmissão ocorrem são focadas na rapidez da transmissão, deixando todo o 
processamento nos nós ~\cite{kurose}. Essa característica, junto com o fato de quase todo tráfego da Internet ser não policiado, 
permitiu o surgimento dos ataques de negação de serviço.

\section{Definição}
Um ataque de negação de serviço nada mais é que um ataque virtual voltado a interromper o provimento de um serviço específico~\cite{taxonomy}. 
Normalmente a intenção do ataque é impossibilitar o acesso de usuários legítimos a uma sub-rede, um computador específico, um 
servidor ou até mesmo a um serviço disponibilizado online. Podemos citar como alvos mais comuns para esses ataques: servidores de
bancos, páginas de compras e vendas, sistemas de cartão de crédito, páginas governamentais e máquinas pessoais~\cite{stateoftheart}~\cite{taxonomy}.

O ataque em si, não permite a extração de informação de seu alvo, diferente de outros ataques não há vazamento de informação apenas
a indisponibilidade do serviço atacado. Não se eliminando a possibilidade de ocorrência de ataques diferentes e simultâneos.

Os objetivos dos ataques, quase sempre, são motivados por ambições pessoais onde o objetivo principal é causar dano a vítima. Porém, já foram confirmados vários outros motivos como: prestígio na comunidade \emph{hacker}, atrapalhar empresas concorrentes, chantagem 
e ataques políticos ~\cite{taxonomy}.

O ataque de negação de serviço é popularmente chamado de DoS ou DDoS (no inglês, \emph{Denial of Service} e \emph{Distributed Denial of Service} respectivamente
). O DoS consiste em bloquear os recursos da vítima para que usuários legítimos não possam ser capazes
 de consumi-lo, normalmente, o acesso ou a disponibilidade do recurso são afetados. O DDoS(ataque de negação de serviço distribuído) é uma adaptação do DoS, onde em vez do uso de uma máquina para derrubar
 o alvo, são usadas várias máquinas infectadas, com o mesmo propósito.

\subsection{Um breve exemplo}
Um simples exemplo de DoS para derrubar servidores \emph{web} é o \emph{Slowloris}. Como descrito na RFC 2616~\cite{codigosHTTP}, a
requisição de uma página \emph{web} é feita em HTTP, usando TCP. O \emph{Slowloris} é um ataque que tira vantagem das requisições 
HTTP para esgotar todas as conexões do servidor e deixá-lo ocupado o suficiente para não atender a nenhum usuário legítimo~\cite{smurfDef}.

Uma vez que uma conexão TCP seja estabelecida com o servidor, o atacante manda um pedido parcial de uma página qualquer, porém, 
esse pedido não está completo, a reação do servidor é esperar pelo resto do pacote que chegará pela conexão TCP. O servidor mantém
a conexão ativa enquanto espera pelo resto da requisição, porém o resto da requisição também está incompleto, na verdade todas as
continuações estarão incompletas deixando a conexão ocupada e indisponível.

Um servidor pequeno suporta poucas conexões simultâneas e ativas, então com apenas um computador pode-se esgotar todas as conexões de um servidor deixando-o sem serviço. O \emph{Slowloris} apesar de simples já foi bem eficiente em derrubar pequenos e médios servidores e ilustra muito bem a ideia de um DoS que visa esgotar a capacidade do servidor em vez da banda~\cite{slowloris}~\cite{defcom}.

\begin{figure}[H]
\centerline{\includegraphics[scale=0.5]{figuras/httpnormal.png}}
\caption{Imagem contendo o funcionamento normal de um servidor web, com requisições GET.}
\label{fig:normalGet}
\end{figure}

\begin{figure}[H]
\centerline{\includegraphics[scale=0.6]{figuras/slowloris.png}}
\caption{Imagem descrevendo o ataque slowloris para uma conexão.}
\label{fig:slowloris}
\end{figure}

\section{Dificuldades na segurança contra ataques DoS}
Com a constante evolução dos ataques DoS, a segurança e a prevenção contra os ataques se tornam cada vez mais difíceis e exigem 
constante evolução. Várias ferramentas sofisticadas, poderosas e de fácil uso para executar ataques DoS são facilmente obtidas na
Internet, o que aumenta o risco potencial de novos atacantes. Essas ferramentas também são pequenas, simples, de fácil uso e por 
consequência fáceis de se esconder e evoluir~\cite{stateoftheart}. Os danos diretos causados por um ataque podem incluir: pane do 
sistema, corrupção de arquivos e indisponibilidade total ou parcial de serviços. Entretanto, danos indiretos podem ser bem graves, 
alvos de ataques como empresas e orgãos governamentais podem sofrer perdas significativas por não ter um serviço disponibilizado, 
como perder clientes, deixar de executar um serviço vital a sua sobreviência, perder apoio de clientes, sócios e outras partes envolvidas,
perder credibilidade, grandes prejuízos e outras consequências.

Além da constante evolução, os ataques DDoS geram tráfego tão similar e entrelaçado ao de usuários legítimos, que muitas vezes se torna 
difícil distinguir entre tráfego legítimo e o de um atacante. Muitas das soluções para impedir DDoS's acabam por gastar tanto recurso e 
banda que acabam por ajudar no ataque, indisponibilizando e consumindo os recursos destinados a usuários legítimos~\cite{stateoftheart}.

Existem várias formas de se derrubar um servidor, tendo sido a mais popular por muito tempo, esgotar a banda do alvo. Inundar a banda
do alvo com várias sequências de pacotes ininterruptos foi, talvez, a solução mais simples e direta adotada, mas com a evolução do 
hardware, das redes e dos servidores, a simplicidade se esvaiu. Com a Internet mais adaptada, o número de máquinas necessárias para
derrubar um servidor apenas com quantidade se tornou dispendioso, então, outros métodos de ataque surgiram. Aproveitar-se de um 
protocolo ou uma aplicação mal formulada, causando uma pane ou o desligamento de um alvo, passou a ser uma opção, como citado no 
exemplo do \emph{slowloris}. 

Com a crescente evolução dos DoS e a grande variedade disponível fica difícil o reconhecimento de padrões similares para a detecção dos ataques, sendo que provavelmente muitos mais surgirão. Não há como prever os métodos a serem usados pelos atacantes, porém assim que descobertos, surge a necessidade de uma resposta e uma evolução na segurança. Elaborar uma solução eficiente requer um estudo aprofundado do assunto, o que é a principal idéia desse trabalho de conclusão de curso, demonstrar um ataque atual e viável para dar o pontapé inicial de uma solução criativa antes mesmo que esse ataque se torne popular.

\subsection{Empecilhos na criação de mecanismos de defesa}
O grande impacto e evolução dos DoS levaram a criação de inúmeros mecanismos de defesa (normalmente comerciais), entretanto, o problema continua não 
solucionado e poucas dessas soluções são adotadas. Uma grande dificuldade da implantação dessas soluções é o fato de que, não adianta 
apenas a vítima do ataque adotar a solução/mecanismo de defesa, algumas soluções devem ser implantadas em toda a Internet para garantir sua efetividade. Como 
será visto futuramente, uma rede não segura pode servir de ferrementa de ataque para uma vítima totalmente diferente desconhecida 
daquela rede.

Grande parte das soluções contra DoS são distribuídas, principalmente pelo fato da vítima não ter muitos recursos disponíveis durante um ataque, já que os mesmos estão sendo bombardeados. Tais soluções precisam ser implantadas ao longo da Internet, evitando máquinas infectadas e redes inseguras, mas não há muita garantia quanto a essas soluções, pois a Internet tem sua gerência descentralizada o que dificulta a adesão geral e acaba por desencorajar a escolha dessas soluções~\cite{stateoftheart}.

Uma peculiaridade das soluções distribuídas é que, quem deve adotar a solução, na verdade, não é a vítima do ataque ou alguém da sua subrede, mas sim alguém de fora da situação que está com sua subrede intacta. Tal peculiaridade exige que algum tipo de relação seja estabelecida para que ambos, vítima e portador do mecanismo de defesa, se beneficiem da situação, caso contrário não há motivação ou obrigação para um estranho defender uma outra rede~\cite{taxonomy}.

Outra dificuldade da criação de mecanismos de defesa é a falta de conhecimento, tanto conhecimento sobre o ataque (um dos pontos desse documento) como conhecimento e dados de alguma ocorrência do ataque. Muitas vezes os ataques passam despercebidos e seus detalhes não são revelados, ou por causarem uma fama ruim à vítima ou por motivos de sigilo (alguns casos governamentais e militares)~\cite{stateoftheart}~\cite{taxonomy}.

Mesmo com tantos empecilhos, várias soluções ainda são implementadas, adotadas e vendidas na Internet. Porém, não há \emph{benchmarks},
comparações ou provas concretas de grande parte dessas soluções, o que também desencoraja a sua adesão. Concertos de pequenas 
vulnerabilidades em aplicações são fáceis, mas soluções de amplo espectro como as sugeridas são complexas e não há 
muita garantia de sua eficiência, talvez pela falta de ambiente para se testar ataques, já que por muitos a prática desses 
ataques mesmo que academicamente é considerada errada.



